Reconstruction surfacique de Poisson

Durant mon stage de recherche et développement chez C4W, une entreprise spécialisée dans la reconstruction de surfaces 3D à partir de données issues de scanners, j'ai été impliqué dans un projet visant à reconstruire des surfaces numériques "propres".

Ce stage, réalisé dans l'open space de l'entreprise à Montpellier de mai à novembre 2016, portait sur la création d'un algorithme de reconstruction pour des applications en conception assistée par ordinateur (CAO), notamment pour modéliser des gouttières dentaires destinées aux professionnels de santé.

Tâches & Objectifs

Mon rôle consistait à développer une première solution algorithmique permettant de reconstruire une surface 3D à partir d'un nuage de points orientés, généré par un scanner. L'objectif principal était de synthétiser ces données en une fonction mathématique et d'en déduire une surface 3D exploitable. Le succès de cette tâche reposait sur la qualité visuelle des résultats et la rapidité d'exécution de l'algorithme, avec une contrainte de temps maximal de calcul de 10 secondes, adapté aux outils de CAO.

Actions et Développement

Pour atteindre ces objectifs, j'ai d'abord étudié en profondeur l'article scientifique de Kazhdan et Bolibho, qui proposait un algorithme de reconstruction de surface basé sur l'équation de Poisson. J'ai ensuite intégré cette solution dans le logiciel de C4W, tout en développant en parallèle une version propriétaire de l'algorithme "Marching Cube", essentiel pour visualiser la surface reconstruite. J'ai fait face à plusieurs défis, comme la nécessité de créer une version propriétaire de l'algorithme afin de contourner les limitations de licence open-source, et la gestion des grandes dimensions des maillages qui posaient des problèmes de stockage en mémoire vive. J'ai également dû optimiser la compilation en C++ pour éviter des temps de calcul excessifs. Tout au long du projet, mes décisions étaient guidées par les besoins métiers et les contraintes de performance du logiciel.

Résultats

Le projet a abouti à un algorithme de "Marching Cube" fonctionnel permettant de reconstruire des surfaces 3D de qualité dans des délais raisonnables. Le succès fut mesuré en comparant la distance entre les maillages originaux et ceux reconstruits, ainsi qu'en évaluant le taux de défauts qui pouvaient rendre l'impression 3D impossible. À long terme, ce travail bénéficia particulièrement au développement de gouttières dentaires, avec un retour enthousiaste de la part des responsables du projet orthodontique. J'ai également acquis de nouvelles compétences techniques, notamment en programmation GPU (CUDA) pour accélérer les calculs, ainsi qu'en gestion d'Octrees adaptatifs, et en optimisation de la reconstruction algorithmique.

Stack technique

Le projet repose sur les outils et technologies suivants :

  • Langage de programmation : C++
  • Environnement de développement : Visual Studio
  • Accélération GPU : CUDA
  • Structures de données : Octrees adaptatifs
  • Algorithme : Reconstruction de Poisson, Marching Cube

Il est important de noter que cette stack technique était imposée par l'entreprise. Les défis techniques majeurs rencontrés incluent :

  • Problèmes de lenteur liés à la configuration des opérations matricielles lors de la compilation
  • Complexité de la programmation GPU
  • Reproduction de l'algorithme de reconstruction de Poisson